package main

import (
	"crypto/tls"
	"crypto/x509"
	"database/sql"
	"fmt"
	"github.com/go-sql-driver/mysql"
	"log"
	"os"

	_ "github.com/go-sql-driver/mysql"
)

func main() {
	// 1. 读取 CA 证书文件
	rootCertPool := x509.NewCertPool()
	pem, err := os.ReadFile("./pem/ApsaraDB-CA-Chain.pem")
	if err != nil {
		log.Fatal("读取CA证书失败:", err)
	}

	if ok := rootCertPool.AppendCertsFromPEM(pem); !ok {
		log.Fatal("添加CA证书到信任池失败")
	}

	// 2. 配置 TLS
	mysql.RegisterTLSConfig("aliyun-rds", &tls.Config{
		RootCAs: rootCertPool,
	})

	// 3. 连接字符串
	dsn := "eaccount_v2:Jsp_123123@tcp(yyj666.rwlb.rds.aliyuncs.com:3306)/main? &timeout=5s"

	// 4. 打开数据库连接
	db, err := sql.Open("mysql", dsn)
	if err != nil {
		log.Fatal("数据库连接失败:", err)
	}
	defer db.Close()

	// 测试连接
	err = db.Ping()
	if err != nil {
		log.Fatal("数据库Ping失败:", err)
	}
	log.Println("数据库连接成功!")

	// 查询数据库版本
	version, err := getMySQLVersion(db)
	if err != nil {
		log.Fatal("查询数据库版本失败:", err)
	}

	log.Printf("MySQL数据库版本: %s", version)
	log.Println("成功连接到阿里云RDS，并使用SSL加密!")
}

// getMySQLVersion 查询并返回MySQL数据库版本
func getMySQLVersion(db *sql.DB) (string, error) {
	var version string
	err := db.QueryRow("SELECT VERSION()").Scan(&version)
	if err != nil {
		return "", fmt.Errorf("查询版本失败: %v", err)
	}
	return version, nil
}
